package com.mazaiting.generator.controller;

import com.mazaiting.common.core.domain.result.Option;
import com.mazaiting.common.core.ex.exceptions.BusinessException;
import com.mazaiting.common.core.ex.exceptions.EmptyObjectException;
import com.mazaiting.generator.domain.form.CloneGroupForm;
import com.mazaiting.generator.domain.form.TemplateGroupForm;
import com.mazaiting.generator.domain.query.TemplateGroupQuery;
import com.mazaiting.generator.domain.vo.TemplateGroupVO;
import com.mazaiting.generator.service.ITemplateGroupService;
import com.mazaiting.mybatisplus.domain.vo.BasePageVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

/**
* 模板组
*
* @author mazaiting
* @datetime 2022-11-11 23:12:51
*/
@Slf4j
@RestController
@RequestMapping("generator/v1/templateGroup")
@RequiredArgsConstructor
public class TemplateGroupController {

    private final ITemplateGroupService templateGroupService;

    /**
     * 分页数据
     * @param templateGroupQuery 查询对象
     * @return 分页数据
     */
    @GetMapping("page")
    public BasePageVO<TemplateGroupVO> page(@Valid TemplateGroupQuery templateGroupQuery){
        return templateGroupService.page(templateGroupQuery);
    }

    /**
     * 根据 ID 获取数据
     * @param id ID
     * @return 数据信息
     */
    @GetMapping("{id}")
    public TemplateGroupVO get(@PathVariable("id") Long id) throws EmptyObjectException {
        return templateGroupService.getInfoById(id);
    }

    /**
     * 保存数据
     * @param templateGroupForm 表单信息
     * @return true: 新增成功; false: 新增失败
     */
    @PostMapping
    public boolean save(@Valid TemplateGroupForm templateGroupForm){
        return templateGroupService.save(templateGroupForm);
    }

    /**
     * 修改数据
     * @param templateGroupForm 表单信息
     * @return true: 修改成功; false: 修改失败
     */
    @PutMapping
    public boolean update(@Valid TemplateGroupForm templateGroupForm){
        return templateGroupService.update(templateGroupForm);
    }

    /**
     * 删除修改数据
     * @param ids id 列表
     * @return true: 删除成功; false: 删除失败
     */
    @DeleteMapping
    public boolean delete(@RequestParam("ids") String ids){
        return templateGroupService.deleteByIds(ids);
    }

    /**
     * 模板组下拉列表
     *
     * @return 模板组下拉列表
     */
    @GetMapping("options")
    public List<Option<Long>> listOptions() throws BusinessException {
        return templateGroupService.listOptions();
    }

}